# scripts/create_admin.py
"""
Author: didiplus
Description: 创建管理员账号脚本
Date: 2025-08-20 23:00:00
LastEditors: didiplus
LastEditTime: 2025-08-20 23:00:00
FilePath: /WeChatBot/app/scripts/create_admin.py
Version: 1.0
"""
import sys
import os

# 添加项目根目录到Python路径
current_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, current_dir)

from sqlalchemy.orm import Session
from getpass import getpass
import argparse

from core import get_db_session
from models.user import User
from services.user import UserService

def create_admin_user(
    username: str, 
    email: str, 
    password: str,
    nickname: str = None
):
    """
    创建管理员用户
    
    Args:
        username (str): 用户名
        email (str): 邮箱
        password (str): 密码
        nickname (str, optional): 昵称
    """
    db = get_db_session()
    try:
        # 初始化数据库（确保表已创建）
        from core import init_db
        init_db()
        
        user_service = UserService(db)
        
        # 检查用户是否已存在
        existing_user = user_service.get_user_by_username(username)
        if existing_user:
            print(f"用户 '{username}' 已存在")
            return False
        
        # 创建用户数据
        from schemas.user import UserCreate
        user_create = UserCreate(
            username=username,
            email=email,
            password=password,
            nickname=nickname or f"管理员-{username}"
        )
        
        # 创建用户
        user = user_service.create_user(user_create)
        
        # 设置为超级用户
        user.is_superuser = True
        db.commit()
        db.refresh(user)
        
        print(f"管理员账号创建成功！")
        print(f"用户名: {user.username}")
        print(f"邮箱: {user.email}")
        print(f"昵称: {user.nickname}")
        print(f"用户ID: {user.id}")
        print("权限: 超级管理员")
        
        return True
        
    except Exception as e:
        print(f"创建管理员账号失败: {str(e)}")
        db.rollback()
        return False
    finally:
        db.close()

def main():
    """
    主函数
    """
    parser = argparse.ArgumentParser(description='创建管理员账号')
    parser.add_argument('--username', '-u', help='管理员用户名')
    parser.add_argument('--email', '-e', help='管理员邮箱')
    parser.add_argument('--nickname', '-n', help='管理员昵称')
    
    args = parser.parse_args()
    
    # 获取用户输入
    if not args.username:
        args.username = input("请输入管理员用户名: ").strip()
        if not args.username:
            print("用户名不能为空")
            return
    
    if not args.email:
        args.email = input("请输入管理员邮箱: ").strip()
        if not args.email:
            print("邮箱不能为空")
            return
    
    password = getpass("请输入管理员密码: ")
    if not password:
        print("密码不能为空")
        return
    
    confirm_password = getpass("请确认管理员密码: ")
    if password != confirm_password:
        print("两次输入的密码不一致")
        return
    
    if not args.nickname:
        args.nickname = input("请输入管理员昵称（可选，直接回车使用默认值）: ").strip()
        if not args.nickname:
            args.nickname = None
    
    # 创建管理员账号
    success = create_admin_user(
        username=args.username,
        email=args.email,
        password=password,
        nickname=args.nickname
    )
    
    if success:
        print("\n管理员账号创建完成！")
    else:
        print("\n管理员账号创建失败！")

if __name__ == "__main__":
    main()